package com.cskaoyan.javase.oop3.innerclazz6.local4.use3;

/**
 * @description: 局部内部类的经典使用
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 *写一个方法去返回接口或者抽象类的具体子类
 *
 * 用局部内部类返回一个接口实现类 适合用于想偷懒 不想写接口实现类的适合
 * 适合于 只使用一次的实现类 或者就想调用一次接口的方法
 * 但是对于多次调用，这种方式就不适用
 *
 */
public class Demo {
    public static void main(String[] args) {
        //经典写法调用
        I i = getIInstance();
        i.test();

        //内部类的高端写法 调用
        I i2 = getIInstance2();
        i2.test();


    }
    public static I getIInstance(){
        //经典写法
        //先用一个类实现这个接口
        //然后创建这个类的对象
        return new IImpl(); //匿名对象
    }

    //高端的写法，使用局部内部类
    public static I getIInstance2(){
        //定义局部内部类
        class IInner implements I{
            @Override
            public void test() {
                System.out.println("222222");
            }
        }
        //创建局部内部类对象
        //IInner iInner =
        return new IInner();
    }
}

interface I{
     void test();
}
class IImpl implements I{
    @Override
    public void test() {
        System.out.println("1111111");
    }
}
